TCP Server এবং Client-এর উদাহরণ দেখানোর জন্য আমরা C ভাষায় একটি সহজ প্রোগ্রাম তৈরি করবো, যেখানে সার্ভার একটি নির্দিষ্ট পোর্টে অপেক্ষা করবে এবং ক্লায়েন্ট সেই পোর্টে সংযোগ স্থাপন করে ডেটা পাঠাবে ও গ্রহণ করবে।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// 1. Socket তৈরি করা
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 2. সার্ভার ঠিকানা সেটআপ করা
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 3. Binding করা
if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {
perror("Bind failed");
exit(EXIT_FAILURE);
}
// 4. Listening করা
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
exit(EXIT_FAILURE);
}
printf("Server is listening on port %d\n", PORT);
// 5. Accepting সংযোগ
if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
perror("Accept failed");
exit(EXIT_FAILURE);
}
// 6. ডেটা গ্রহণ করা
read(new_socket, buffer, 1024);
printf("Client: %s\n", buffer);
// 7. ডেটা পাঠানো
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent to client\n");
// 8. Socket বন্ধ করা
close(new_socket);
close(server_fd);
return 0;
}
TCP Client প্রোগ্রাম উদাহরণ (C ভাষায়)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[1024] = {0};
// 1. Socket তৈরি করা
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("Socket creation failed\n");
return -1;
}
// 2. সার্ভার ঠিকানা সেটআপ করা
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 3. IP Address সেট করা
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
printf("Invalid address or Address not supported\n");
return -1;
}
// 4. সার্ভারের সাথে সংযোগ স্থাপন করা
if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
printf("Connection Failed\n");
return -1;
}
// 5. ডেটা পাঠানো
send(sock, hello, strlen(hello), 0);
printf("Hello message sent to server\n");
// 6. ডেটা গ্রহণ করা
read(sock, buffer, 1024);
printf("Server: %s\n", buffer);
// 7. Socket বন্ধ করা
close(sock);
return 0;
}
প্রোগ্রাম বিশ্লেষণ
Socket তৈরি:
socket()
ফাংশন ব্যবহার করে TCP প্রোটোকল ব্যবহার করে সার্ভারের জন্য একটি Socket তৈরি করা হয়।Binding:
bind()
ফাংশন সার্ভারের Socket-কে নির্দিষ্ট IP Address (INADDR_ANY
, যা সমস্ত নেটওয়ার্ক ইন্টারফেস নির্দেশ করে) এবং পোর্ট (8080
) এর সাথে সংযুক্ত করে।Listening:
listen()
ফাংশন সার্ভারের Socket-কে ইনকামিং সংযোগ গ্রহণের জন্য অপেক্ষমাণ রাখে।Accepting সংযোগ:
accept()
ফাংশন একটি ইনকামিং সংযোগ গ্রহণ করে এবং নতুন Socket তৈরি করে, যা ক্লায়েন্টের সাথে ডেটা ট্রান্সফার করতে ব্যবহৃত হয়।ডেটা গ্রহণ এবং পাঠানো:
read()
ফাংশন ব্যবহার করে ক্লায়েন্ট থেকে ডেটা গ্রহণ করা হয়, এবং send()
ফাংশন ব্যবহার করে ক্লায়েন্টে ডেটা পাঠানো হয়।Socket বন্ধ করা:
close()
ফাংশন ব্যবহার করে নতুন Socket এবং সার্ভার Socket বন্ধ করা হয়।Socket তৈরি:
socket()
ফাংশন ব্যবহার করে TCP প্রোটোকল ব্যবহার করে ক্লায়েন্টের জন্য একটি Socket তৈরি করা হয়।সার্ভারের ঠিকানা সেটআপ:
inet_pton()
ফাংশন সার্ভারের IP Address (127.0.0.1
, যা localhost নির্দেশ করে) এবং পোর্ট (8080
) সেট করে।সার্ভারের সাথে সংযোগ স্থাপন:
connect()
ফাংশন ব্যবহার করে ক্লায়েন্ট সার্ভারের সাথে সংযোগ স্থাপন করে।ডেটা পাঠানো এবং গ্রহণ:
send()
ফাংশন ব্যবহার করে সার্ভারে ডেটা পাঠানো হয় এবং read()
ফাংশন ব্যবহার করে সার্ভার থেকে ডেটা গ্রহণ করা হয়।Socket বন্ধ করা:
close()
ফাংশন ব্যবহার করে ক্লায়েন্টের Socket বন্ধ করা হয়।প্রথমে সার্ভার প্রোগ্রাম চালু করুন:
8080
) এ ইনকামিং সংযোগের জন্য অপেক্ষা করবে।এরপর ক্লায়েন্ট প্রোগ্রাম চালু করুন:
ক্লায়েন্ট এবং সার্ভারের মধ্যে বার্তা আদান-প্রদান:
common.read_more